package org.adoxx.project.lola; import java.net.URLDecoder; import java.util.UUID; import javax.ws.rs.core.Response; import org.adoxx.project.lola.model.LoLAResponse; import org.adoxx.project.lola.model.RemoteLog; import org.adoxx.project.lola.remoteutil.RemoteLoLAUtils; import org.apache.commons.validator.GenericValidator; import com.jcraft.jsch.Session; public class LoLAVerificationImpl implements LoLAVerification { String user; public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getHost() { return host; } public void setHost(String host) { this.host = host; } String password; String host; int port = 22; RemoteLoLAUtils utils = new RemoteLoLAUtils(); String remoteLoLADir = "/tmp/lola/"; public void init() { System.out.println("initalization"); } @Override public Response analyse(String network, String formula, String options) { // line breaks are %0A RemoteLog remoteLog = new RemoteLog(); // create required file names String uniqueID = UUID.randomUUID().toString(); String remoteFileName = uniqueID + ".lola"; String remoteResponseFileName = uniqueID + ".out"; // create the session Session session = utils.createSession(user, host, port, password, remoteLog); try { // upload network if available if (!GenericValidator.isBlankOrNull(network)) { // create the file on the server and upload content utils.createRemoteDirectory(session, remoteLoLADir, remoteLog); utils.uploadContentToServer(session, URLDecoder.decode(network, "UTF-8").split("\n"), remoteFileName, remoteLoLADir, remoteLog); } // run lola /** * LoLA: a low-level analyzer. Report bugs to * . Visit LoLA's home page at * . * * Usage: lola [FILE] [--formula=FORMULA] [OPTIONS] */ StringBuffer lolaCommand = new StringBuffer(); lolaCommand.append("lola "); if (!GenericValidator.isBlankOrNull(network)) { lolaCommand.append(remoteLoLADir + remoteFileName + " "); } if (!GenericValidator.isBlankOrNull(formula)) { lolaCommand.append("--formula=\"" + formula + "\" "); } if (!GenericValidator.isBlankOrNull(options)) { lolaCommand.append(options + " "); } // add response reader lolaCommand.append("&> " + remoteLoLADir + remoteResponseFileName); remoteLog.addTimeStampEntry("Running command: "+ lolaCommand.toString()); utils.runShellCommand(session, lolaCommand.toString(), remoteLog); // read file from server and return String result = utils.readContent(session, remoteLoLADir + remoteResponseFileName, remoteLog); session.disconnect(); LoLAResponse response = new LoLAResponse(); response.setRemoteLog(remoteLog.toString()); response.setResult(result); return Response.ok(response).build(); } catch (Exception e) { // TODO: handle exception } return Response.status(404).build(); } }